/*
 * SearchCollectionTh.java
 * Copyright (c) 2006, FMap
 *
 * Created on 11 de febrero de 2006, 12:26
 */

package fmap.actions.mapF.searchMapF;

import fmap.actions.EvtThread;
import fmap.actions.collection.searchCollection.*;
import fmap.actions.mapF.InsertMapFResultSearch;
import fmap.dao.MapFDao;
import fmap.model.MapF;
import java.util.Vector;

/**
 * Hilo que busca una cadena de texto en un mapa de ficheros
 *
 * @author  Javier Sanroman Araujo
 * @version $Revision: 1.1
 */
public class SearchMapFTh  implements Runnable
{
    /** Referencia al receptor unico */
    SearchCollectionAction miReceptor;
    SearchMapFAction miReceptorMapF;
    
    int ID;
    // Mapa de ficheros sobre el que tenemos que realizar la busqueda
    MapF mapF;
    // Cadena de texto a buscar
    String txtSearch;
    boolean checkBoxCase;
    
    
    public SearchMapFTh ( MapF _mapF, String _txtSearch, int _ID, boolean _checkBoxCase )
    {
        checkBoxCase    = _checkBoxCase;
        ID              = _ID;
        txtSearch       = _txtSearch;
        mapF            = _mapF;
    }
    
    
    public int getID ()
    {
        return ID;
    }
    
    public MapF getMapFResult ()
    {
        return mapF;
    }
    
    public void run ()
    {
        mapF.setEstado (2); // Esta buscando
        
        if( mapF != null )
        {
            Vector vResult = new Vector ();
            // Obtenemos todos los nodos de la BD que coincidan con la cadena a buscar
            if( checkBoxCase )      vResult = new fmap.dao.NodeDao ().searchNodesNameCase (mapF.getIdMapF (), txtSearch );
            else                    vResult = new fmap.dao.NodeDao ().searchNodesName (mapF.getIdMapF (), txtSearch );
            
            
            mapF.setNumResult ( vResult.size () );

            // Construimos el arbol de ficheros y lo almacenamos en BD
            if( vResult.size () > 0 ) new InsertMapFResultSearch ( vResult, mapF );


            // Buscamos en el nombre del mapa de ficheros
            //------------------------------------------------------------
            boolean mapFResultSearch = false;
            if ( checkBoxCase )     mapFResultSearch = new MapFDao ().searchMapFNameCase ( mapF.getIdMapF (), txtSearch );
            else                    mapFResultSearch = new MapFDao ().searchMapFName ( mapF.getIdMapF (), txtSearch );            
            
            if( mapFResultSearch )
            {
                mapF.setNumResult ( mapF.getNumResult ()+1);
                mapF.setEstado (4); // Finalizo la busqueda y se encontro coincidencia en el nombre o la descripcion del mapa de ficheros
            }
            else
            {
                mapF.setEstado (3); // Finalizo la busqueda
            }
            //------------------------------------------------------------


            if( miReceptor != null) miReceptor.finBusqueda ( new EvtThread ( this, ID ) );
            else                    miReceptorMapF.finBusqueda ( new EvtThread ( this, ID ) );
        }
        else
        {
            mapF.setError ( true );
            
            if( miReceptor != null) miReceptor.finBusqueda ( new EvtThread ( this, ID ) );
            else                    miReceptorMapF.finBusqueda ( new EvtThread ( this, ID ) );
        }
    }
    
    
    /** Añade un componente listener a esta clase */
    public void addMiEventoListener ( SearchCollectionAction receptor )
    {
        // No se permite que intente incorporar mas de un receptor
        if( miReceptor == null )
        {
            miReceptor = receptor;
        }
    }
    
    /** Añade un componente listener a esta clase */
    public void addMiEventoListener ( SearchMapFAction receptor )
    {
        // No se permite que intente incorporar mas de un receptor
        if( miReceptor == null )
        {
            miReceptorMapF = receptor;
        }
    }
    
}
